package com.kurumi.service;

import java.util.List;
import java.util.Map;

import com.kurumi.domain.PractitionerVO;
import com.kurumi.pojo.homepage.HomepagePdf;
import com.kurumi.pojo.homepage.MedicalRecordBasic;
import com.kurumi.pojo.homepage.MedicalRecordCost;
import com.kurumi.pojo.homepage.MedicalRecordDiagnoss;
import com.kurumi.pojo.homepage.MedicalRecordDoctor;
import com.kurumi.pojo.homepage.MedicalRecordIcu;
import com.kurumi.pojo.homepage.MedicalRecordNurse;
import com.kurumi.pojo.homepage.MedicalRecordOperation;
import com.kurumi.pojo.homepage.MedicalRecordTransfusion;
import com.kurumi.pojo.homepage.MedicalRecordTurn;
import com.kurumi.query.MedicalRecordQuery;

public interface MedicalRecordDataManageService {

	List<Map<String,Object>> getMedicalRecordOfExport(MedicalRecordQuery medicalRecordQuery);
	
	
	List<Map<String,Object>> getMedicalRecordOfExcel(MedicalRecordQuery medicalRecordQuery);
	
	
	int medicalRecordDelete(String visitGuid);


	List<String> getMediclJson(String startTime, String endTime);
	
	Map<String,Object> getMedicalRecordMapByGuid(String guid);
	
	String getRegionCodeByName(String regionName);
	
	/**
	 * 根据医师姓名获取执业证书编号
	 * @param name
	 * 			姓名
	 * @param type
	 * 			类型 1 医生  2 护士
	 * @return
	 */
	String getCertificatePracticeByName(String name,int type);
	
	String getMedicalRecordJsonByGuid(String guid);
	
	List<String> getMedicalRecordJsonByPage(String startTime,String endTime,int startIndex,int endIndex);
	
	/**
	 * 根据工号查询
	 * @param code
	 * @return
	 */
	PractitionerVO getCertificateByMedicalWorkCode(String code);


	/**
	 * 根据国籍字典名称查询国籍英文名称
	 * @param nationalityName 国籍名称
	 * @return
	 */
	String getEnnameByName(String nationalityName);


	/**
	 * 保存或新增病案基本信息
	 * @param basic
	 */
	void saveOrUpdateMedicalRecordBasic(MedicalRecordBasic basic);

	/**
	 * 保存或新增诊断信息
	 * @param list
	 */
	void saveOrUpdateMedicalRecordDiagnoss(List<MedicalRecordDiagnoss> list,String visitGuid);


	/**
	 * 保存或更新护理信息
	 * @param nurse
	 */
	void saveOrUpdateNurse(MedicalRecordNurse nurse);


	/**
	 * 保存或新增手术信息
	 * @param operationList 手术集合
	 * @param visitGuid guid
	 */
	void saveOrUpdateOperation(List<MedicalRecordOperation> operationList, String visitGuid);


	/**
	 * 保存或更新费用信息
	 * @param cost
	 */
	void saveOrUpdateCost(MedicalRecordCost cost);


	/**
	 * 保存或更新输血信息
	 * @param list
	 * @param visitGuid
	 */
	void saveOrUpdateTransfusion(List<MedicalRecordTransfusion> list, String visitGuid);


	/**
	 * 保存或更新医师信息
	 * @param doctorList
	 * @param visitGuid
	 */
	void saveOrUpdateDoctor(List<MedicalRecordDoctor> doctorList, String visitGuid);


	/**
	 * 保存或更新icu信息
	 * @param icuList
	 * @param visitGuid
	 */
	void saveOrUpdateICU(List<MedicalRecordIcu> icuList, String visitGuid);


	/**
	 * 保存或更新转科信息
	 * @param turnList
	 * @param visitGuid
	 */
	void saveOrUpdateTurn(List<MedicalRecordTurn> turnList, String visitGuid);
	
	/**
	 * 根据唯一标识查询首页pdf信息
	 * @param onlyId 唯一标识
	 * @return
	 */
	HomepagePdf getHomepagePdfByOnlyId(String onlyId);


	/**
	 * 保存或更新首页pdf信息
	 * @param homepagePdf
	 */
	void saveOrUpdateHomepagePdf(HomepagePdf homepagePdf);
	
	/**
	 * 获取未同步PDF数据
	 * @param homepagePdf
	 */
	List<HomepagePdf> getPDFWaitingforSyncToNeusoft();
	
	/**
	 * 更新首页pdf信息为已更新
	 * @param homepagePdf
	 */
	void updatePdfIsSyncStatus(Integer id);

	
	/**
	 * 同步medical_record_basic缺少的数据信息
	 * @param startTime 出院查询开始时间
	 * @param string2  出院查询结束时间
	 * @return
	 */
	List<String> syncMediclRecordBasicVisitGuid(String startTime, String endTime);
	
	/**
	 * 根据唯一标识查询guid集合
	 * @param onlyIds
	 * @return
	 */
	List<String> getVisitGuidByOnlyIds(String onlyIds);

}
